<script>
/*
  1
  转换秒数成为带格式的时间
    要求时间格式 时:分:秒
    不足两位的补0，比如1小时0分10秒：01:00:10
*/

function formatTime(second) {
  var h=Math.floor(second/3600);//小时
  var s=Math.floor((second-h*3600)/60);//秒
  var m=Math.floor((second-s*60-h*3600))//分
  if(h<=9){
    h='0'+h
  }if(m<=9){
    m='0+m'
  }if(s<=9){
    s='0'+s
  }
  return `${h}:${s}:${m}`

}

console.log(formatTime(3610)) // 01:00:10


/*
  2
  描述
  完成下面的函数使这段代码可以正常运行
*/

function speak(fn, obj) {
  return fn.call(obj)

}

console.log(speak(
  function () {
    console.log(this.greeting + ', ' + this.name + '!!!');
  },
  {greeting: 'Hello', name: 'Rebecca'}
)) // 打印 Hello, Rebecca!!!

/*
  3
  完成函数 createModule，调用之后满足如下要求：
  1、返回一个对象
  2、对象的 greeting 属性值等于 str1， name 属性值等于 str2
  3、对象存在一个 sayIt 方法，该方法返回的字符串为 greeting属性值 + ', ' + name属性值
  */
  function createModule(str1, str2) {
    return {
      greeting:str1,
      name:str2,
      sayIt:function(){
        return `${this.greeting},${this.name}`
      }
    }

  }
 console.log(createModule('你好', '张三')); 
/*
  4
  描述
  在数组 arr 中，查找值与 item 相等的元素出现的所有位置
*/
function findAllOccurrences(arr, target) {
  // 可以尝试用reduce完成
  let Arr=[];
 for(var i=0;i<arr.length;i++){
   arr.reduce(function(init,item,index){
     if(item==target){
       Arr.push(index)
     }
   },0)
  return Arr
 }
 
}
// test：
console.log(findAllOccurrences(['a','b','c','d','e','f','a','b','c'], 'a')); 
// [0, 6]


/*
  5
  描述
  找出数组 arr 中重复出现过的元素（不用考虑返回顺序）
*/
function duplicates(arr) {
  // 可以尝试用reduce完成
  var b = [];
 var result = [];
 for (var i= 0; i<arr.length; i++){
      b[i] = arr.reduce(function(init,curr) {
         //如果当前置等于item，该函数值加一
         return curr === arr[i] ? init+1:init;
     },0)
     if (b[i] > 1 && result.indexOf(arr[i]) === -1){
         result.push(arr[i]);
     }
 }
 return result;

 }

// test：
console.log(duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3])); 
// [1, 3, 4]

</script>